1. 정형 데이터 마이닝(lotto)1) 연관규칙 분석을 수행하기 위해 lotto 데이터셋을 transaction 데이터로 변환하시오.
(단, 본 분석에서 로또번호가 추첨된 순서는 고려하지 않고 분석을 수행하도록 한다.)
변환된 데이터에서 가장 많이 등장한 상위 10개의 로또번호를 막대그래프로 출력하고 이에 대해 설명하시오
library(arules)
library(reshape2)
setwd("/Users/csian/Desktop/CSIAN/ADP/ADP-test/모의고사 1회")
lotto<-read.csv("lotto.csv")
sum(is.na(lotto))
lotto_melt<-melt(lotto, id.vars=1)
lotto_melt<-lotto_melt[, -2]
lotto_split<-split(lotto_melt$value, lotto_melt$time_id)
lotto_tr<-as(lotto_split, "transactions")
inspect(lotto_tr[1:5])
itemFrequencyPlot(lotto_tr, topN=10, type="absolute")
->
대부분의 당첨번호는 비슷한 빈도로 추첨되고 있음을 알 수 있다.
34는 그 중 가장 많이 추첨된 번호이다.
2) 변환된 데이터에 대해 apriori 함수를 사용하여 다음 괄호 안의 조건을 반영하여 연관규칙을 생성하고,
이를 토대로 “rules_1”이라는 변수에 저장하여 결과를 해석하시오(최소 지지도: 0.002, 최소 신뢰도: 0.8, 최소 조합 항목 수: 2, 최대 조합 항목 수: 6) 그리고 도출된 연관 규칙들을 향상도를 기준으로 내림차순 정렬하여, 상위 30개의 규칙을 확인하고, 데이터프레임으로 변환하여 csv 파일로 출력하라.
rules_1<-apriori(lotto_tr, parameter=list(supp=0.002, conf=0.8, minlen=2, maxlen=6))
rules_2<-sort(rules_1, by="lift", decreasing=TRUE)
inspect(rules_2[1:30])
df<-as.data.frame(inspect(rules_2[1:30]))
write.csv(df, file="lotto_rule.csv", row.names=FALSE)
3) 생성된 연관규칙 “rules_1”에 대한 정보를 해석하고, 1)번 문제를 통해 확인했던 번호가 우측항에 존재하는 규칙들만을 “rules_most_freq”라는 변수에 저장하시오. 그리고 해당 규칙을 해석하여 인사이트를 도출한 후 서술하시오.
>>> 총 679개의 규칙으로 구성된 rules_1 중 632개의 규칙은 4개의 숫자로 구성되어 있고, 47개는 5개의 숫자로 구성되어 있다. 규칙에 대한 향상도는 최소 6.410으로 꽤 높은 값을 가지고 있다. 번호들의 교집합을 의미하는 지지도는 평균 0.002364이다.
transactions는 859로 859회 동안 로또의 당첨번호를 의미한다.
rules_most_freq<-subset(rules_1, rhs %in% "34")
inspect(rules_most_freq)
총 19개의 규칙이 도출되었다. [1] 규칙을 확인해 보면, {7, 22, 31}번과 {34}번이 함께 추첨될 확률은 support(지지도) 0.002328289dlau, dir 0.2%dlek.
이에 대한 향상도는 6.410448로 {34}만 추첨했을 때보다, {7, 22, 31}이 뽑히고 {34}도 뽑힐 확률이 약 6배 높음을 의미한다.
하지만, 이에 대한 분석(규칙)은 로또가 추첨된 순서를 고려하지 않은 단순한 조합에 대한 규칙이기에 향상도가 높은 숫자들의 조합이 로또 추첨번호가 될 가능성이 높은 것은 아니다.
2. 통계분석1) FIFA 데이터에서 각 선수의 키는 Height 변수에 피트와 인치로 입력되어 있습니다. 이를 cm로 변환하여 새로운 변수 Height_cm를 생성하시오.
(“ ‘ “ 앞의 숫자는 피트, “ ‘ “ 뒤의 숫자는 인치, 1피트=30cm, 1인치=2.5cm)
library(plyr)
setwd("/Users/csian/Desktop/CSIAN/ADP/ADP-test/모의고사 1회")
fifa<-read.csv("FIFA.csv")
sum(is.na(fifa))
ft_inch<-(strsplit(fifa$Height, "'"))
Height_cm<-ldply(ft_inch, function(x){
return(as.numeric(x[1])*30+as.numeric(x[2])*2.5)
})
colnames(Height_cm)<-"Height_cm"
fifa<-cbind(fifa, Height_cm)
2) 포지션을 의미하는 Position 변수를 아래 표를 참고하여 “Forward”, “Midfielder”, “Defender”, “GoalKeeper”로 재범주화하고,
factor 형으로 변환하여 Position_Class라는 변수를 생성하고 저장하시오
fifa<-within(fifa,{
Position_Class=character(0)
Position_Class[Position %in% c("LS", "ST", "RS", "LW", "LF", "CF", "RF", "RW")]="Forward"
Position_Class[Position %in% c("LAM", "CAM", "RAM", "LM", "LCM", "CM", "RCM", "RM")]="Midfielder"
Position_Class[Position %in% c("LWB", "LDM", "CDM", "RDM", "RWB", "LB", "LCB", "CB", "RCB", "RB")]="Defender"
Position_Class[Position %in% c("GK")]="GoalKeeper"
})
fifa$Position_Class<-factor(fifa$Position_Class, levels=c("Forward", "Midfielder", "Defender", "GoalKeeper"))
3) 새로 생성한 Position_Class 변수의 각 범주에 따른 Value 변수 평균값의 차이를 비교하는 일원배치 분석을 수행하고 결과를 해석하시오.
(데이터는 등분산성을 만족한다고 가정) 그리고 평균값 차이가 통계적으로 유의하다면 사후검정을 수행하시오.
(fifa_aov<-aov(formula=Value~Position_Class, data=fifa))
summary(fifa_aov)
분산분석을 통해 SSA의 자유도는 3(집단수-1=4-1), SST의 자유도는 16638(자료수-집단수=16642-4)임을 알 수 있다.
p-value는 2e-16으로 매우 작기 때문에 유의수준 0.05 하에서 네 가지 포지션(Position_Class)에 따른 선수의 시장가치(Value)가 동일하다는 귀무가설을 기각한다.
즉, 포지션(Position_Class)별 선수의 시장가치(Value)의 평균값들 중 적어도 하나의 포지션은 통계적으로 유의한 차이가 있는 값을 가진다.
TukeyHSD(aov(formula=Value~Position_Class, data=fifa))
R의 TukeyHSD함수를 이용하면, 네 가지 포지션들 중 특히나 어떠한 포지션에서 선수의 시장 가치에 차이가 있는지를 파악하기 위한 사후검정을 수행한다.
모든 집단 수준에 대하여 두 집단씩 짝을 지어 각각 다중비교를 수행한다.
Midfielder-Forward는 p-value가 0.05보다 크기 때문에 유의수준 0.05하에서 두 집단의 시장 가치가 같다는 귀무가설을 기각할 수 없다.
하지만 이를 제외한 5개의 집단에 대해서는 p-value 값이 0.05보다 작기 대문에 각각의 비교에 대한 귀무가설을 기각한다.
(해당 포지션들에 대한 선수들의 시장가치 평균값은 각각 통계적으로 유의한 차이가 있다.)
diff는 왼쪽 집단과 오른쪽 집단 간 반응값의 차이를 의미한다. 따라서 포지션이 Defender일 때보다 Forward 일 때 선수의 시장가치는 통계적으로 유의하게 큰값을 가진다고 해석 가능하다.
4) Preferred Foot(주로 사용하는 발)과 Position_Class(재범주화 된 포지션) 변수에 따라 Value(선수의 시장가치)의 차이가 있는지를 알아보기 위해 이원배치 분산 분석을 수행하고, 결과를 해석하시오.
fifa$Preferred_Foot<-factor(fifa$Preferred_Foot, levels=c("Left", "Right"))
(fifa_twoway_aov<-aov(formula=Value~Position_Class+Preferred_Foot+Position_Class:Preferred_Foot, data=fifa))
summary(fifa_twoway_aov)
Prefeered_Foot 변수에 대한 p-value는 0.03033으로 유의수준 0.05하에 귀무가설을 기각한다. 선수의 주발에 따라 선수의 가치에는 차이가 있다고 판단할 수 있다.
Preferred_Foot과 Position_Class 사이의 교호작용에 대한 p-value는 0.00221로 유의수준 0.05보다 작으므로 귀무가설을 기각한다.
즉, 선수의 주발과 포지션의 상호작용에 의한 효과가 있다고 판단할 수 있다.
5) Age, Overall, Wage, Height_cm, Weight_lb가 Value에 미치는 영향을 알아보는 회귀분석을 단계적 선택법을 사용하여 수행하고 결과를 해석하시오.
step(lm(formula=Value~1, data=fifa), scope=list(lower=~1, upper=~Age+Overall+Wage+Height_cm+Weight_lb))
첫 번째 단계에서 Wage 변수가 모형에 추가되었을 때, AIC가 265409로 가장 작다. 따라서 첫 번째 단계에서 Wage 변수를 추가한다.
두 번째 단계에서는 Overall 변수가 추가되었을 때, AIC값이 가장 작아지기 때문에 Overall 변수를 모형에 추가한다.
이와 같은 단계를 반복적으로 수행할 였을 때,
lm(formula=Value~Wage+Overall+Age+Height_cm, data=fifa)라는 최종 모형이 결정된다.
최종적으로 선택된 추정된 회귀식은 y=-8690.818+184.184*Wage+241.345*Overall-202.160*Age-8.445*Height_cm이다.
fifa.lm<-lm(formula=Value~Wage+Overall+Age+Height_cm, data=fifa)
summary(fifa.lm)
상수항, Wage, Overall, Age, Height_cm 변수들 모두 유의수준 0.05하에 통계적으로 유의하다. 모형의 결정계수는 0.7908,
수정된 결정계수는 0.7908로 추정된 다변량 회귀식은 전체 데이터의 약 80%를 설명해주고 있음을 알 수 있다.
또한 회귀모형의 F 통계량에 대한 p-value값은 0.05보다 작으므로 유의수준 0.05하에서 모형이 통계적으로 유의한 것을 알 수 있다.
3. 비정형 텍스트마이닝(영화 기생충_review, 영화 기생충_사전.txt)1) “영화 기생충_review.txt” 데이터를 읽어온 뒤 숫자, 특수 문자 등을 제거하는 전처리 작업을 시행하시오.
그리고 “영화 기생충_review_txt”를 사전에 등록하시오.